#ifndef __MQTT_PARSE_H__
#define __MQTT_PARSE_H__
#include "dev_data.h"
#include <vector>
struct DeviceHeartbeat
{
    std::string ProtocolID; // 协议版本
    int DevType;            // 设备类型
    std::string DevIP;      // 设备IP
    std::string HeartTime;  // 心跳时间
    uint32_t HeartInterval; // 心跳间隔（秒）
    uint32_t TestNum;       // 测试次数
    uint32_t AlarmNum;      // 报警次数
};

struct rsp_data_info
{
    std::string ProtocolID;
    uint16_t DevType;
    std::string DevIP;
    int Time[6];
    std::string PersonnelID;
    bool Alarming;
    uint16_t Speed;
    bool OverSpeed;
    uint16_t RSPCount;                     // RSP数量
    uint32_t RSPUseBit;                    // 设备使用位
    uint32_t reg_status;                   // 设备 状态
    uint32_t reg_rsp_status[MAX_RSP_NUM];  // RSP、探测器的状态
    float reg_rsp_gama_valt[MAX_RSP_NUM];  // 伽马值
    float reg_rsp_alpha_valt[MAX_RSP_NUM]; // 阿尔法值
    float reg_rsp_bate_valt[MAX_RSP_NUM];  // 贝塔值
};
struct AlarmThresholdConfig
{
    uint32_t alarm_mode; // 报警模式：1=动态，2=静态

    // 静态阈值
    float static_gamma_threshold;
    float static_beta_threshold;
    float static_alpha_threshold;
    float static_gamma_severe;
    float static_beta_severe;
    float static_alpha_severe;

    // 动态系数
    float dynamic_gamma_coff;
    float dynamic_beta_coff;
    float dynamic_alpha_coff;
    float dynamic_gamma_severe_coff;
    float dynamic_beta_severe_coff;
    float dynamic_alpha_severe_coff;
};
bool parse_heart_msg(struct DeviceHeartbeat &config, const std::string &json_string);
// 构建 JSON 字符串（只包含目标字段，且 HeartTime → Time）
std::string build_heartbeat_json(const DeviceHeartbeat &hb);
// 解析 MQTT 主题
std::vector<std::string> split_topic(const std::string &topic, char delimiter = '/');
// 从 JSON 字符串加载报警阈值到 AlarmThresholdConfig
bool load_alarm_threshold_from_json(AlarmThresholdConfig &data, const std::string &json_str);

// 函数：构建 JSON 字符串，Time 使用当前本地时间
std::string build_time_sync_json(void);
/**
 * @brief 构建获取阈值参数JSON
 *
 * @return std::string
 */
std::string build_get_threshold_json(void);

/**
 * @brief 构建获取设备rsp数量json
 *
 * @return std::string
 */
std::string build_get_rsp_num_json(uint32_t rsp_num);

/**
 * @brief 解析设备rsp数据信息
 *
 * @param json_string
 * @param config
 * @return true
 * @return false
 */
bool parseDetectorData(const std::string &jsonStr, rsp_data_info &info);

/* =========================  函数声明 ========================== */

/**
 * @brief 将 DeviceHeartbeat 数据填充到 dev_data 结构体中
 *        仅填充 dev_data 中存在的字段，其余忽略
 * @param heartbeat 输入的心跳数据
 * @param data      输出的 dev_data 结构体（被填充）
 */
void fillDevDataFromHeartbeat(const DeviceHeartbeat &heartbeat, dev_data &data);

/**
 * @brief 将 AlarmThresholdConfig 数据填充到 dev_data 结构体中
 *        仅填充 dev_data 中存在的对应字段，其余忽略
 * @param config 输入的报警阈值配置
 * @param data   输出的 dev_data 结构体（被填充）
 */
void fillDevDataFromAlarmThresholdConfig(const AlarmThresholdConfig &config, dev_data &data);

/**
 * @brief 将 rsp_data_info 数据填充到 dev_data 结构体中
 *        仅复制有对应字段的部分，其余忽略
 * @param rsp_info 输入的 RSP 数据
 * @param data     输出的设备数据结构
 */
void fillDevDataFromRspDataInfo(const rsp_data_info &rsp_info, dev_data &data);

/**
 * @brief 打印 dev_data 结构体内容到日志
 * @param data 要打印的结构体
 * @param label 标签，用于区分不同调用场景（可选）
 */
void zlogDevData(zlog_category_t *zlog_mqtt, const dev_data &data, const char *label = "dev_data");

#endif